package com.intco.ait.quotation.api.infrastructure.mybatis.entity.encodingPlatform;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 物料实体类 物料信息
 *
 * @author zhang yong
 * @version 1.0.1
 * @date 2024-04-01 8:45
 */
@Data
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@EqualsAndHashCode(callSuper = false)
// Schema: 物料信息
public class Material implements Serializable {

    // description: 业务类型 添加时需要 finished:成品,frame:框条,building:建材,pellet:粒子原料,other:其他 (required)
    private String productBusiness;
    // description: 是否为外购
    private Boolean outsource = false;
    // description: 业务类型名称 (hidden)
    private String productBusinessName;
    // description: 分类名称 (hidden)
    private String productClass;
    // description: 批次号 即调用批次唯一标识接口获取的批次号 (required)
    private String uuId;
    // description: 添加主键(虚拟) 后台提供 (required)
    private String addId;
    // description: 物料编码 (hidden)
    private String materialCode;
    // description: 物料名称 (hidden)
    //@AutoTranslation
    private String materialName;
    // description: 框条编码 (hidden)
    private String mouldingStyleCode;
    // description: 换算率 (hidden)
    private String conversionRate;
    // description: 主计量单位 (hidden)
    private String pkMeasdoc;
    // description: 辅计量单位 (hidden)
    private String csaComUnitCode;
    // description: 外框编码 (hidden)
    private String outerFrameCode;
    // description: 外框内径尺寸 (hidden)
    private String outerFrameSize;
    // description: 产品类别 传基础数据的产品类别value (required)
    private String materialType;
    // description: 产品特性 (required)
    private String productFeatures;
    // description: 工艺类型 传基础数据的工艺类型 (required)
    private String processType;
    // description: 客户简称 (required)
    private String cusShortName;
    // description: 客户ITEM (required)
    //@CannotContain(value = "'", message = "客户Item不能包含单引号'")
    private String cusItem;
    // description: 框条 后台生成返回 不需要传入后台根据addId自行获取
    private String mould;
    // description: 模具，外购编码用
    private String mouldBase;
    // description: 模具图片，外购编码用
    private String mouldBaseImg;
    // description: 每外箱包含几内箱 (required)
    private Integer boxNum;
    // description: 每箱所含片数 (required)
    private Integer unitNum;
    // description: 每套所含片数 (required)
    private Integer pcsPerTao;
    // description: 备注(在存货名称后) (required)
    private String remarks;
    /**
     * 一个是新增货物描述字段，存到bd_material的def7字段里(2024-07-01添加)
     */
    // description: 货物描述(成品需要) 非必填
    private String productDescribe;
    /*
     * 建材成品尺寸字段，应用于建材成品所填尺寸（2024-07-09添加）
     * */
    // description: 建材成品尺寸
    private String buildingSize;
    /*
     * 成品编码中相框分类下录入，非必填（2024-07-09添加）
     * */
    // description: 衬纸编码（相框录入）非必填
    private String backingPaperCode;
    // description: 产品功能 基础数据的产品功能 (required)
    private String productFun;
    // description: 产品材质 基础数据的产品材质 (required)
    private String materialQuality;
    // description: 产品形状 基础数据的产品形状name (required)
    private String materialShape;
    // description: 产品⼤类 基础数据的产品⼤类name  建材必传 (required)
    private String productCategories;
    // description: 框条宽度 建材需要 可编辑
    private BigDecimal mouldWidth;
    // description: 框条高度 建材需要 可编辑
    private BigDecimal mouldHeight;
    // description: 框条截面积 建材需要 可编辑
    private BigDecimal mouldSectionalArea;
    // description: 框条密度 建材需要 可编辑
    private BigDecimal mouldDensity;
    // description: 框条米重 建材需要 可编辑
    private BigDecimal mouldMeterWeight;
    // description: 表面工艺 基础数据的表面工艺name (required)
    private String surfaceTechnology;
    // description: 表面风格 基础数据的表面风格name  建材必传 (required)
    private String surfaceStyle;
    // description: 应用场景 基础数据的应用场景name  建材必传 (required)
    private String applicationScenarios;
    // description: 内径尺寸MM,不需要传入,后台自行处理
    private String innerSizeMm;
    // description: 内径尺寸Inch,不需要传入,后台自行处理
    private String innerSizeInch;
    // description: 报关标识 基础数据的报关标识value (required)
    private String declareFlag;
    // description: 报关标识 基础数据的报关标识name,不需要传入,后台自行处理 (hidden)
    private String declareFlagName;
    // description: 镜子磨边类型 基础数据的镜子磨边类型name 镜框必须传
    private String edgeGrinding;
    // description: 画芯来源 基础数据的画芯来源name 画框必须传
    private String pictureSource;
    // description: 画框主题 基础数据的画框主题name 画框必须传
    private String frameTheme;
    // description: 画框工艺 基础数据的画框工艺name 画框必须传
    private String frameTechnology;
    // description: 画芯编号 画框必须传
    private String odmCode;
    // description: 画框样品号 画框必须传
    private String frameSampleNo;
    // description: 行数据,不需要传入,后台自行处理
    List<InventoryMoulding> itemList;
    // description: 框条主键 部分建材成品需传入
    private String mouldId;
    // description: 长度 建材选择展示需要
    private BigDecimal length;
    // description: 长度,这个字段只做展示，原因是LENGTH字段数据库无法返回
    private String lengthVal;

    // description: 装箱根数 建材选择展示需要
    private Integer boxPackingCount;
    // description: 建材属性 是否非FSC[1:是 0:否] 建材需要
    private Integer mdfIsNotFsc;
    // description: 吸音棉型号 吸音棉专用
    private String sacCode;
    // description: 板条样式 吸音棉专用
    private String lathStyle;
    // description: 更新人 (hidden)
    private String modifier;
    // description: 更新时间 (hidden)
    private String modifyTime;
    // description: 创建人  仅展示用
    private String creator;
    // description: 创建时间 仅展示用
    private String createTime;

    /*
     * 框条编码下用于细分框条类别（如PS、MDF、PVC等）
     * */
    // description: 框条类别
    private String frameType;

    // description: 供应商产品型号， 外购编码时该字段拼接在备注之前，非必填
    private String supplierProductModel;

    // description: 公司,可选值为[ SD, SH ]，默认SD，SD-山东，SH-上海
    //private MouldingStyleCompanyEnum company = MouldingStyleCompanyEnum.SD;
    private String company = "";

    // description: 单件净重
    private BigDecimal netWeight;
    // description: 单件毛重
    private BigDecimal grossWeight;
    // description: 单件体积
    private BigDecimal pieceVolume;

    // description: 单箱/托 长
    private BigDecimal boxLength;
    // description: 单箱/托 宽
    private BigDecimal boxWidth;
    // description: 单箱/托 高
    private BigDecimal boxHeight;
    // description: 单箱/托 净重
    private BigDecimal boxNetWeight;
    // description: 单箱/托 毛重
    private BigDecimal boxGrossWeight;
    // description: 单箱/托 体积
    private BigDecimal boxVolume;

    // PRE_CUT产品功能所需字段
    // description: 裁切数量1
    private BigDecimal prePcs1;
    // description: 裁切数量2
    private BigDecimal prePcs2;
    // description: 裁切长度1
    private BigDecimal preLength1;
    // description: 裁切长度2
    private BigDecimal preLength2;
    // description: 裁切角度1
    private BigDecimal preAngle1;
    // description: 裁切角度2
    private BigDecimal preAngle2;

    // description: 建材成品款式
    private String buildingFinishedShape;

}
